Bounded Context
境界づけられたコンテキスト
どういうものか?
大まかには、Subdomainを解決領域にマッピングしたもの
https://scrapbox.io/mrsekut-book-4048931164/031 https://gyazo.com/0e14562333fe9e44344bba01092ce937Gyazoの画像ロック.icon
同じ言葉が、同じ意味でしか使われていないことを保証する単位、と言える
Bounded Contextは実装寄りの概念なので、
もっとモデルの話をしたい場合はSubdomainに書こうmrsekut.icon
Context Maps
複数のBounded Context間の関係
参考
/mrsekut-book-4798121967/384 (境界づけられたコンテキスト)
/mrsekut-book-4048931164/056: 3.1 自律的なソフトウェアコンポーネントとしての境界づけられたコンテキスト
#WIP
実装レベルの話
DMMFでは、1つのBounded Contextを1つのworkflow (DDD)として表現している
また、1つのWorkflowは、1つの関数で表現される
つまり、Bouded Contextは、1つの関数で表現される程度の粒度であるらしいmrsekut.icon
小さくね?mrsekut.icon*3
最初にイメージしていたのはもっと大きい粒度で、各Contextがサブシステムぐらいかなと思っていたmrsekut.icon
つまり、個々がアプリケーションとして独立していて、やり取りする際にはAPIを仲介するようなイメージ
Subdomainにも書いているが、それぐらいの規模の話をしているとイメージするとわかりやすい気がする
Context同士ではEventでやり取りする
/mrsekut-book-4048931164/061: 3.4 境界づけられたコンテキストでのワークフロー
queueなりを使ってやりとりする
実装してみたmrsekut.icon
前段のworkflowが処理後にqueueにeventを投げる ref
後段のworkflowは、queueをlistenして、eventが来たらcommandに変換しつつworkflowを実行する ref
逆に、同一のContext内では、Eventでやりとりしない
/mrsekut-book-4048931164/063: 3.5 境界づけられたコンテキストの中のコード構造
まあ、別にしてもよいのだろうけど、QueueやListenerを用意する必要があって、無駄に複雑になるので
/mrsekut-book-4873119820/276 (17.4 境界づけられたコンテキスト)
マイクロサービスの文脈
どうやって境界を作るか?
/mrsekut-book-4798121967/385
明示的な境界は、チーム編 成、そのアプリケーションに特有の部分が持つ用途、コードベースやデータベーススキー マなどの物理的な表現などの観点から設定すること。
まあそうなりそうだよねmrsekut.icon
同じコードベースでルールで境界付けるの運用でカバーなので辛そうだし
逆に言えば、同じチーム内では同じモデルを扱うようにしましょうとも言える
https://speakerdeck.com/ytake/ru-men-jing-jie-dukeraretakontekisuto
https://martinfowler.com/articles/enterpriseREST.html#bounded-contexts